<html>
<head><meta charset="utf-8"><title>meeting 2019-04-15 · wg-traits · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/index.html">wg-traits</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html">meeting 2019-04-15</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="163401607"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163401607" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163401607">(Apr 15 2019 at 18:02)</a>:</h4>
<p>Hey <span class="user-group-mention" data-user-group-id="692">@WG-traits</span> -- shall we have a meeting? I had hoped to talk about the work I did on factoring the chalk crate and perhaps try to do a bit of a "take stock of next steps" meeting. I think the "sprint" hasn't quite worked out for a variety of reasons =)</p>



<a name="163401785"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163401785" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163401785">(Apr 15 2019 at 18:04)</a>:</h4>
<p>(cc <span class="user-mention" data-user-id="129457">@Florian Diebold</span>, <span class="user-mention" data-user-id="133169">@matklad</span>, <span class="user-mention" data-user-id="125131">@detrumi</span> -- this is all pretty related to integrating chalk into rls)</p>



<a name="163401833"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163401833" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163401833">(Apr 15 2019 at 18:05)</a>:</h4>
<p>I spent .. a sort of embarassingly large amount of time trying to make a good diagram of the crates and kind of failed, but in the last hour I tried to <a href="https://github.com/nikomatsakis/chalk-ndm/blob/queryify/doc/crates.md" target="_blank" title="https://github.com/nikomatsakis/chalk-ndm/blob/queryify/doc/crates.md">write-up some notes on the general design here</a>. It's not really <em>that</em> complicated.</p>



<a name="163401882"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163401882" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163401882">(Apr 15 2019 at 18:05)</a>:</h4>
<p>Of course, writing up those notes also revealed to me a (relatively minor) problem around re-entrancy that will arise when we try to tackle specialization (and will require some altering of the design)</p>



<a name="163401955"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163401955" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163401955">(Apr 15 2019 at 18:06)</a>:</h4>
<blockquote>
<p>a sort of embarassingly large amount of time trying to make a good diagram of the crates and kind of failed</p>
</blockquote>
<p>I blame the tooling =) I didn't find the right diagramming program yet I thnk :)</p>



<a name="163402029"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402029" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402029">(Apr 15 2019 at 18:07)</a>:</h4>
<p>OK so how shall we do this.</p>



<a name="163402043"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402043" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402043">(Apr 15 2019 at 18:07)</a>:</h4>
<p>Actually, give me 1 minute to grab a fresh cup of coffee ;)</p>



<a name="163402167"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402167" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> detrumi <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402167">(Apr 15 2019 at 18:09)</a>:</h4>
<p>That's a good way to give us time to read the notes <span aria-label="slight smile" class="emoji emoji-1f642" role="img" title="slight smile">:slight_smile:</span></p>



<a name="163402267"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402267" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402267">(Apr 15 2019 at 18:10)</a>:</h4>
<p>OK, back.</p>



<a name="163402297"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402297" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402297">(Apr 15 2019 at 18:10)</a>:</h4>
<p>So yeah, feel free to skim the notes, but I'll reproduce a (shortened) version here</p>



<a name="163402314"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402314" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402314">(Apr 15 2019 at 18:10)</a>:</h4>
<p>There are essentially three key components:</p>
<ul>
<li>the <strong>integration</strong> crate</li>
<li>the <strong>solver</strong></li>
<li>the <strong>rules</strong> crate</li>
</ul>



<a name="163402359"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402359" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402359">(Apr 15 2019 at 18:11)</a>:</h4>
<p>the solver and rules crate never talk <em>directly</em> to one another</p>



<a name="163402376"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402376" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402376">(Apr 15 2019 at 18:11)</a>:</h4>
<p>all intercommunication is ultimately mediated by the <strong>integration crate</strong></p>



<a name="163402465"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402465" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402465">(Apr 15 2019 at 18:12)</a>:</h4>
<p>the solver/rules crates also do not know about chalk or anything like that. They each work against a "database" that fulfills a trait -- <code>ChalkSolveDatabase</code> or <code>ChalkRulesDatabase</code> respectively -- which defines the things they can ask of "their context"</p>



<a name="163402550"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402550" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402550">(Apr 15 2019 at 18:13)</a>:</h4>
<p>Example of the <a href="https://github.com/nikomatsakis/chalk-ndm/blob/f9f27e12ed9fa5ef8b71becb283891e4d610317d/chalk-solve/src/lib.rs#L12-L22" target="_blank" title="https://github.com/nikomatsakis/chalk-ndm/blob/f9f27e12ed9fa5ef8b71becb283891e4d610317d/chalk-solve/src/lib.rs#L12-L22">ChalkSolveDatabase</a>:</p>
<div class="codehilite"><pre><span></span><span class="sd">/// The trait for defining the program clauses that are in scope when</span>
<span class="sd">/// solving a goal.</span>
<span class="k">pub</span><span class="w"> </span><span class="k">trait</span><span class="w"> </span><span class="n">ChalkSolveDatabase</span>: <span class="nc">Debug</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="sd">/// Returns a set of program clauses that could possibly match</span>
<span class="w">    </span><span class="sd">/// `goal`. This can be any superset of the correct set, but the</span>
<span class="w">    </span><span class="sd">/// more precise you can make it, the more efficient solving will</span>
<span class="w">    </span><span class="sd">/// be.</span>
<span class="w">    </span><span class="k">fn</span> <span class="nf">program_clauses_that_could_match</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">goal</span>: <span class="kp">&amp;</span><span class="nc">DomainGoal</span><span class="p">,</span><span class="w"> </span><span class="n">vec</span>: <span class="kp">&amp;</span><span class="nc">mut</span><span class="w"> </span><span class="nb">Vec</span><span class="o">&lt;</span><span class="n">ProgramClause</span><span class="o">&gt;</span><span class="p">);</span><span class="w"></span>

<span class="w">    </span><span class="k">fn</span> <span class="nf">is_coinductive_trait</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">trait_id</span>: <span class="nc">TraitId</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="kt">bool</span><span class="p">;</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>



<a name="163402638"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402638" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402638">(Apr 15 2019 at 18:14)</a>:</h4>
<p>the <a href="https://github.com/nikomatsakis/chalk-ndm/blob/f9f27e12ed9fa5ef8b71becb283891e4d610317d/chalk-rules/src/lib.rs#L15" target="_blank" title="https://github.com/nikomatsakis/chalk-ndm/blob/f9f27e12ed9fa5ef8b71becb283891e4d610317d/chalk-rules/src/lib.rs#L15"><code>ChalkRulesDatabase</code> trait</a> is the other one, it's a bit bigger :)</p>



<a name="163402700"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402700" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402700">(Apr 15 2019 at 18:14)</a>:</h4>
<p>I had this table I wound up cutting, but maybe it's helpful actually. It summarizes the intercommunication.</p>
<table>
<thead>
<tr>
<th>crate</th>
<th>question</th>
<th>answered by</th>
</tr>
</thead>
<tbody>
<tr>
<td>chalk-solve</td>
<td>program clauses for a given goal?</td>
<td>chalk-rules</td>
</tr>
<tr>
<td>chalk-solve</td>
<td>is a given trait coinductive?</td>
<td>integration</td>
</tr>
<tr>
<td>chalk-rules</td>
<td>solve a given goal</td>
<td>chalk-solve</td>
</tr>
<tr>
<td>chalk-rules</td>
<td>query the rust ir</td>
<td>integration</td>
</tr>
</tbody>
</table>



<a name="163402807"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402807" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402807">(Apr 15 2019 at 18:15)</a>:</h4>
<p>Anyway, all of this setup I think it is sort of .. mostly correct, though as I mentioned I realized a problem (I'll get to it later).</p>



<a name="163402862"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402862" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402862">(Apr 15 2019 at 18:16)</a>:</h4>
<p>But any questions on this part?</p>



<a name="163402921"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402921" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402921">(Apr 15 2019 at 18:17)</a>:</h4>
<p>/me can't tell what people are doing :)</p>



<a name="163402932"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402932" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402932">(Apr 15 2019 at 18:17)</a>:</h4>
<p>reading notes and listening :)</p>



<a name="163402933"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402933" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> tmandry <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402933">(Apr 15 2019 at 18:17)</a>:</h4>
<p>trying to understand the table :)</p>



<a name="163402936"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402936" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> detrumi <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402936">(Apr 15 2019 at 18:17)</a>:</h4>
<p>So the solver returns a superset, and you need to check those with rules?</p>



<a name="163402958"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163402958" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Florian Diebold <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163402958">(Apr 15 2019 at 18:17)</a>:</h4>
<p>it's very helpful already, I had looked at the PR and was quite confused as to who implements what :)</p>



<a name="163403034"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403034" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403034">(Apr 15 2019 at 18:18)</a>:</h4>
<blockquote>
<p>So the solver returns a superset, and you need to check those with rules?</p>
</blockquote>
<p>not quite -- the solver <strong>asks</strong> for a superset</p>



<a name="163403056"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403056" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403056">(Apr 15 2019 at 18:18)</a>:</h4>
<p>e.g., it might say, I need to prove that <code>Vec&lt;u32&gt;: Clone</code> -- give me any rules that I might use to do that</p>



<a name="163403074"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403074" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403074">(Apr 15 2019 at 18:18)</a>:</h4>
<p>the more precise we can be, the better in some sense, because the solver will do less work</p>



<a name="163403098"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403098" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403098">(Apr 15 2019 at 18:19)</a>:</h4>
<p>but it's also ok if we give it rules that don't apply, it will weed them out</p>



<a name="163403126"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403126" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403126">(Apr 15 2019 at 18:19)</a>:</h4>
<p>it's actually a good place to dig a bit deeper -- but does that make sense so far? (And you do you know what I mean here by "rules"?)</p>



<a name="163403209"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403209" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403209">(Apr 15 2019 at 18:20)</a>:</h4>
<p>it does, i recall talking through this part in one of our recorded video sessions (don't recall which)</p>



<a name="163403218"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403218" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403218">(Apr 15 2019 at 18:20)</a>:</h4>
<p>yeah</p>



<a name="163403280"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403280" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403280">(Apr 15 2019 at 18:21)</a>:</h4>
<p>by "rules" here I mean "Program clauses" in prolog terminology -- basically, the rules that we derive from rust IR. So e.g. if you had <code>impl&lt;T: Clone&gt; Clone for Vec&lt;T&gt;</code>, then that might be lowered to a program clause like </p>
<div class="codehilite"><pre><span></span>Implemented(Vec&lt;T&gt;: Clone) :- Implemented(T: Clone)
</pre></div>


<p>and that is (naturally) something we would want to return through this callback</p>



<a name="163403299"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403299" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403299">(Apr 15 2019 at 18:21)</a>:</h4>
<p>(since it would apply to <code>Vec&lt;u32&gt;</code>)</p>



<a name="163403336"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403336" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403336">(Apr 15 2019 at 18:21)</a>:</h4>
<p>but if there were some impl like <code>impl&lt;T: ?Sized&gt; Clone for Arc&lt;T&gt;</code>, that gives rise to a rule like <code>Implemented(Arc&lt;T&gt;: Clone).</code> -- and we might or might not return that</p>



<a name="163403429"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403429" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> detrumi <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403429">(Apr 15 2019 at 18:22)</a>:</h4>
<p>Right, so mainly impl's, but also trait bounds in functions for example I'd imagine</p>



<a name="163403452"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403452" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403452">(Apr 15 2019 at 18:23)</a>:</h4>
<p>so where-clauses (if that's what you mean) are actually part of the goals</p>



<a name="163403463"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403463" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> detrumi <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403463">(Apr 15 2019 at 18:23)</a>:</h4>
<p>(where they originate I mean, I understand that Prolog rules are more general)</p>



<a name="163403495"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403495" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403495">(Apr 15 2019 at 18:23)</a>:</h4>
<p>i.e., if you have </p>
<div class="codehilite"><pre><span></span><span class="k">fn</span> <span class="nf">foo</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="p">(</span><span class="n">t</span>: <span class="nc">T</span><span class="p">)</span><span class="w"></span>
<span class="k">where</span><span class="w"> </span><span class="n">T</span>: <span class="nb">Clone</span><span class="p">,</span><span class="w"></span>
<span class="p">{</span><span class="w"></span>
<span class="w">   </span><span class="p">...</span><span class="n">t</span><span class="p">.</span><span class="n">clone</span><span class="p">()...</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>



<a name="163403571"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403571" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403571">(Apr 15 2019 at 18:24)</a>:</h4>
<p>when type-checking <code>t.clone()</code>, we might generate a goal for the solver like</p>
<div class="codehilite"><pre><span></span>forall&lt;T&gt; {
  if (T: Clone) { // from the where clause
    T: Clone // prove that `T: Clone`...
  }
}
</pre></div>



<a name="163403579"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403579" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403579">(Apr 15 2019 at 18:24)</a>:</h4>
<p>(not quite right because of implied bounds, but that's the idea)</p>



<a name="163403593"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403593" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403593">(Apr 15 2019 at 18:24)</a>:</h4>
<p>the solver internally knows how to handle this <code>if (T: Clone)</code> business</p>



<a name="163403607"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403607" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403607">(Apr 15 2019 at 18:24)</a>:</h4>
<p>so really the callback is <em>just</em> about the global rules that come from impls and the rust semantics</p>



<a name="163403659"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403659" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403659">(Apr 15 2019 at 18:25)</a>:</h4>
<p>anyway, so, the reason I said this was interesting to dig into a bit</p>



<a name="163403696"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403696" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403696">(Apr 15 2019 at 18:26)</a>:</h4>
<p>it is interesting to think about how the "integration crate" will respond to this request, in terms of caching etc</p>



<a name="163403773"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403773" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403773">(Apr 15 2019 at 18:26)</a>:</h4>
<p>in my branch that is in the PR, the main work I did was extracting the chalk-solve and chalk-rules crates</p>



<a name="163403788"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403788" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403788">(Apr 15 2019 at 18:26)</a>:</h4>
<p>but the chalk crate itself (the "integration" crate) is still working in a kind of "global" fashion</p>



<a name="163403833"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403833" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403833">(Apr 15 2019 at 18:27)</a>:</h4>
<p>so e.g. it <a href="https://github.com/nikomatsakis/chalk-ndm/blob/queryify/src/query.rs#L31" target="_blank" title="https://github.com/nikomatsakis/chalk-ndm/blob/queryify/src/query.rs#L31">has a query that just says "give me the rust-ir for the whole program"</a></p>



<a name="163403840"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403840" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403840">(Apr 15 2019 at 18:27)</a>:</h4>
<div class="codehilite"><pre><span></span><span class="w"> </span><span class="k">fn</span> <span class="nf">program_ir</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="n">Arc</span><span class="o">&lt;</span><span class="n">Program</span><span class="o">&gt;</span><span class="p">,</span><span class="w"> </span><span class="n">ChalkError</span><span class="o">&gt;</span><span class="p">;</span><span class="w"></span>
</pre></div>



<a name="163403905"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403905" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> matklad <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403905">(Apr 15 2019 at 18:28)</a>:</h4>
<p>/me joined, listens attentively</p>



<a name="163403908"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403908" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403908">(Apr 15 2019 at 18:28)</a>:</h4>
<p>however, this <a href="https://github.com/nikomatsakis/chalk-ndm/blob/queryify/src/program.rs#L12-L13" target="_blank" title="https://github.com/nikomatsakis/chalk-ndm/blob/queryify/src/program.rs#L12-L13"><code>Program</code> type</a> has been extracted from the <code>chalk-rust-ir</code> crate and now lives in the <code>chalk</code> crates</p>



<a name="163403913"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403913" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403913">(Apr 15 2019 at 18:28)</a>:</h4>
<p>this is because -- e.g., in the RLS -- it is not something that we would want to have</p>



<a name="163403946"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163403946" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163403946">(Apr 15 2019 at 18:29)</a>:</h4>
<p>(though it's ok in the chalk harness)</p>



<a name="163404000"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404000" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404000">(Apr 15 2019 at 18:29)</a>:</h4>
<p>there is also a concept of <code>ProgramEnvironment</code>, which is the full set of lowered clauses -- this has also been confined to the <code>chalk</code> crate</p>



<a name="163404092"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404092" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404092">(Apr 15 2019 at 18:30)</a>:</h4>
<p>and if you look at the code which answers the solver's "give me all possibly matching clauses" call, you will see it just iterates over a vector (<a href="https://github.com/nikomatsakis/chalk-ndm/blob/queryify/src/db.rs#L67-L76" target="_blank" title="https://github.com/nikomatsakis/chalk-ndm/blob/queryify/src/db.rs#L67-L76">link</a>):</p>
<div class="codehilite"><pre><span></span><span class="w">    </span><span class="k">fn</span> <span class="nf">program_clauses_that_could_match</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">goal</span>: <span class="kp">&amp;</span><span class="nc">DomainGoal</span><span class="p">,</span><span class="w"> </span><span class="n">vec</span>: <span class="kp">&amp;</span><span class="nc">mut</span><span class="w"> </span><span class="nb">Vec</span><span class="o">&lt;</span><span class="n">ProgramClause</span><span class="o">&gt;</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span class="n">env</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">environment</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="n">vec</span><span class="p">.</span><span class="n">extend</span><span class="p">(</span><span class="w"></span>
<span class="w">                </span><span class="n">env</span><span class="p">.</span><span class="n">program_clauses</span><span class="w"></span>
<span class="w">                    </span><span class="p">.</span><span class="n">iter</span><span class="p">()</span><span class="w"></span>
<span class="w">                    </span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="o">|&amp;</span><span class="n">clause</span><span class="o">|</span><span class="w"> </span><span class="n">clause</span><span class="p">.</span><span class="n">could_match</span><span class="p">(</span><span class="n">goal</span><span class="p">))</span><span class="w"></span>
<span class="w">                    </span><span class="p">.</span><span class="n">cloned</span><span class="p">(),</span><span class="w"></span>
<span class="w">            </span><span class="p">);</span><span class="w"></span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>



<a name="163404106"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404106" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404106">(Apr 15 2019 at 18:30)</a>:</h4>
<p><em>this</em> part is not really right, even for chalk</p>



<a name="163404113"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404113" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404113">(Apr 15 2019 at 18:30)</a>:</h4>
<p>(because of specialization)</p>



<a name="163404119"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404119" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> matklad <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404119">(Apr 15 2019 at 18:30)</a>:</h4>
<p>Quick question: what is the purpose of integration crate (<code>chalk</code>)? Should RLS use it directly, or should RLS be itself the "integration" crate? </p>
<p>In other words, why name it "integration", and not by name (<code>chalk</code>)</p>



<a name="163404133"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404133" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404133">(Apr 15 2019 at 18:31)</a>:</h4>
<p>the RLS would be that crate</p>



<a name="163404149"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404149" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404149">(Apr 15 2019 at 18:31)</a>:</h4>
<p>and it is named "chalk"</p>



<a name="163404166"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404166" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404166">(Apr 15 2019 at 18:31)</a>:</h4>
<p>I am trying and maybe failing to use the term "integration crate" in order to be more generic</p>



<a name="163404178"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404178" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404178">(Apr 15 2019 at 18:31)</a>:</h4>
<p>but i'm maybe using it more often than I should :)</p>



<a name="163404254"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404254" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404254">(Apr 15 2019 at 18:32)</a>:</h4>
<p>but yeah I imagine that the RLS would implement the <code>ChalkSolveDatabase</code> and <code>ChalkRulesDatabase</code> traits</p>



<a name="163404270"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404270" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404270">(Apr 15 2019 at 18:32)</a>:</h4>
<p>there is still a <em>bit</em> more refactoring within chalk I think to expose useful concepts before we do that</p>



<a name="163404286"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404286" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404286">(Apr 15 2019 at 18:32)</a>:</h4>
<p>in particular around this callback I'm digging into now</p>



<a name="163404331"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404331" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404331">(Apr 15 2019 at 18:33)</a>:</h4>
<p>basically, a big goal is that we should <em>never</em> 'iterate over the whole program' when solving a given goal</p>



<a name="163404348"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404348" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404348">(Apr 15 2019 at 18:33)</a>:</h4>
<p>in an IDE, you can kind of clearly see why that would be --</p>



<a name="163404352"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404352" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404352">(Apr 15 2019 at 18:33)</a>:</h4>
<p>you want to be as narrow as possible</p>



<a name="163404356"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404356" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404356">(Apr 15 2019 at 18:33)</a>:</h4>
<p>in terms of what you "demand"</p>



<a name="163404433"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404433" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404433">(Apr 15 2019 at 18:34)</a>:</h4>
<p>but also if you think of incremental compliation, where we are monitoring the bits of the program you looked at, it's the same. If you ask for "give me all the program clauses from the whole program" and then <strong>anything</strong> changes, you have to assume all your solving is outdated</p>



<a name="163404466"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404466" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404466">(Apr 15 2019 at 18:34)</a>:</h4>
<p>Anyway so I think a bit of remaining work is to refine that callback from the solver.</p>



<a name="163404500"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404500" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> tmandry <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404500">(Apr 15 2019 at 18:35)</a>:</h4>
<p>having taken an initial crack at salsaification, this is great and overall makes sense :)</p>



<a name="163404508"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404508" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> tmandry <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404508">(Apr 15 2019 at 18:35)</a>:</h4>
<p>minor point, but I'm a little confused why <code>GoalSolver</code> is defined in <code>chalk-rules</code></p>



<a name="163404529"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404529" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404529">(Apr 15 2019 at 18:35)</a>:</h4>
<p>so e.g. if we get callback with a goal like <code>Implemented(Vec&lt;u32&gt;: Clone)</code>, it should only access the rust-ir that might produce rules that answer this query -- i.e., impls of <code>Clone</code>, ideally</p>



<a name="163404545"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404545" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404545">(Apr 15 2019 at 18:35)</a>:</h4>
<blockquote>
<p>minor point, but I'm a little confused why <code>GoalSolver</code> is defined in <code>chalk-rules</code></p>
</blockquote>
<p>yes, that's a good question -- and I think it's actualy not quite right</p>



<a name="163404597"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404597" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404597">(Apr 15 2019 at 18:36)</a>:</h4>
<blockquote>
<p>so e.g. if we get callback with a goal like <code>Implemented(Vec&lt;u32&gt;: Clone)</code>, it should only access the rust-ir that might produce rules that answer this query -- i.e., impls of <code>Clone</code>, ideally</p>
</blockquote>
<p>I should say that <span class="user-mention" data-user-id="131694">@scalexm</span> and I already took a crack at defining this logic in rustc</p>



<a name="163404606"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404606" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404606">(Apr 15 2019 at 18:36)</a>:</h4>
<p>so we basically want to 'port over' that code from rustc back into chalk</p>



<a name="163404619"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404619" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404619">(Apr 15 2019 at 18:36)</a>:</h4>
<p>i.e., knowing which bits of rust-ir might produce rules relevant to a given goal</p>



<a name="163404623"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404623" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404623">(Apr 15 2019 at 18:36)</a>:</h4>
<p>and only lowering those</p>



<a name="163404662"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404662" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404662">(Apr 15 2019 at 18:37)</a>:</h4>
<p>(I'm going to create a paper for this meeting actually to drop some notes in, then we can figure out where to move them to)</p>



<a name="163404800"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404800" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404800">(Apr 15 2019 at 18:38)</a>:</h4>
<p><a href="https://paper.dropbox.com/doc/WG-Traits-2019.04.15-chalk-query--AbTbcYDBEu6753uK9x19rzH6Ag-N5HWPSfKFg4QM0GXzVpln" target="_blank" title="https://paper.dropbox.com/doc/WG-Traits-2019.04.15-chalk-query--AbTbcYDBEu6753uK9x19rzH6Ag-N5HWPSfKFg4QM0GXzVpln">paper link</a></p>



<a name="163404877"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404877" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404877">(Apr 15 2019 at 18:39)</a>:</h4>
<p>So before I take a shot at answering <span class="user-mention" data-user-id="116883">@tmandry</span>'s question about <code>GoalSolver</code>...</p>



<a name="163404931"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404931" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404931">(Apr 15 2019 at 18:40)</a>:</h4>
<p>I guess, first off, any questions on what I wrote so far ?</p>



<a name="163404972"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404972" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> matklad <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404972">(Apr 15 2019 at 18:40)</a>:</h4>
<p>I am not clear about needing <em>two</em> crates to integrate with</p>



<a name="163404988"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404988" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> matklad <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404988">(Apr 15 2019 at 18:40)</a>:</h4>
<p>I guess, I understand why internally this makes sense (separating solving from lowering)</p>



<a name="163404989"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404989" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404989">(Apr 15 2019 at 18:40)</a>:</h4>
<p>like, why separate chalk-solve and chalk-rules?</p>



<a name="163404993"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163404993" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> matklad <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163404993">(Apr 15 2019 at 18:41)</a>:</h4>
<p>yeah</p>



<a name="163405008"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405008" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405008">(Apr 15 2019 at 18:41)</a>:</h4>
<p>it's partly just an internal thing</p>



<a name="163405015"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405015" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> matklad <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405015">(Apr 15 2019 at 18:41)</a>:</h4>
<p>from software engeneering perspective, I'd prefer to integrate RLS with a <em>single</em> crate :D</p>



<a name="163405030"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405030" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> detrumi <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405030">(Apr 15 2019 at 18:41)</a>:</h4>
<p>Why can't one call the other?</p>



<a name="163405036"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405036" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> detrumi <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405036">(Apr 15 2019 at 18:41)</a>:</h4>
<p>So that you only expose one of them</p>



<a name="163405042"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405042" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405042">(Apr 15 2019 at 18:41)</a>:</h4>
<p>well</p>



<a name="163405052"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405052" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405052">(Apr 15 2019 at 18:42)</a>:</h4>
<p>one of my motivations was that -- when I looked closely at the rules crate</p>



<a name="163405109"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405109" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405109">(Apr 15 2019 at 18:42)</a>:</h4>
<p>I had the impression that, with some more work, it could probably be refactored such that it could be used from within rustc</p>



<a name="163405115"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405115" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405115">(Apr 15 2019 at 18:42)</a>:</h4>
<p>but we'd have to do a bit of work on making the various bits of IR a bit more generic</p>



<a name="163405126"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405126" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405126">(Apr 15 2019 at 18:42)</a>:</h4>
<p>we could certainly make an "end point" crate that rls can link against</p>



<a name="163405135"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405135" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405135">(Apr 15 2019 at 18:42)</a>:</h4>
<p>or perhaps have chalk-solve know about chalk-rules</p>



<a name="163405152"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405152" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405152">(Apr 15 2019 at 18:42)</a>:</h4>
<p>to be quite honest, the structure I'm presenting here is also something I sort of evolved a bit towards</p>



<a name="163405157"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405157" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405157">(Apr 15 2019 at 18:43)</a>:</h4>
<p>so for some time I was just picking things apart</p>



<a name="163405166"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405166" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405166">(Apr 15 2019 at 18:43)</a>:</h4>
<p>so that I could see all the pieces holding them together</p>



<a name="163405176"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405176" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405176">(Apr 15 2019 at 18:43)</a>:</h4>
<p>and I think it may make sense to recombine them</p>



<a name="163405184"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405184" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405184">(Apr 15 2019 at 18:43)</a>:</h4>
<p>which is partly why I wanted to talk it out</p>



<a name="163405196"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405196" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405196">(Apr 15 2019 at 18:43)</a>:</h4>
<blockquote>
<p>but we'd have to do a bit of work on making the various bits of IR a bit more generic</p>
</blockquote>
<p>in particular, we'd want to make the rust-ir crate kind of generic over how types are represented etc. It might not be worth the trouble, but it might be.</p>



<a name="163405247"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405247" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> matklad <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405247">(Apr 15 2019 at 18:44)</a>:</h4>
<p>"easy to integrate with rustc" makes sense!  But <code>chalk-facade</code> would also be helpful: at least there will be a single point to start reading the code from :)</p>



<a name="163405271"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405271" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405271">(Apr 15 2019 at 18:44)</a>:</h4>
<p>yeah.</p>



<a name="163405282"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405282" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405282">(Apr 15 2019 at 18:44)</a>:</h4>
<p>I think there is probably an intermediate point that chalk would also integrate with</p>



<a name="163405319"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405319" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405319">(Apr 15 2019 at 18:45)</a>:</h4>
<p>ok, so let me answer <span class="user-mention" data-user-id="116883">@tmandry</span>'s question</p>



<a name="163405340"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405340" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405340">(Apr 15 2019 at 18:45)</a>:</h4>
<p>which was "why does chalk-rules have this <code>GoalSolver</code> trait"</p>



<a name="163405356"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405356" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405356">(Apr 15 2019 at 18:45)</a>:</h4>
<p><code>GoalSolver</code> has a single callback, <code>solve</code>, that lets you solve a given goal</p>



<a name="163405421"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405421" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405421">(Apr 15 2019 at 18:46)</a>:</h4>
<p>(it is a supertrait of <code>ChalkRulesDatabase</code>, so it is meant to be implemented by the general database)</p>



<a name="163405426"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405426" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> tmandry <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405426">(Apr 15 2019 at 18:46)</a>:</h4>
<p>(I think I just realized why btw)</p>



<a name="163405454"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405454" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> tmandry <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405454">(Apr 15 2019 at 18:46)</a>:</h4>
<p>specialization?</p>



<a name="163405532"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405532" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405532">(Apr 15 2019 at 18:47)</a>:</h4>
<p>Right now, the chalk-rules crate includes three things:</p>
<ul>
<li>code to lower from rust-ir to program clauses</li>
<li>code to check wf conditions for a given struct, trait, etc</li>
<li>code to check coherence</li>
</ul>
<p>the latter two are basically Rust functions that return <code>Result&lt;(), ChalkError&gt;</code> &lt;-- we should probably tweak those signatures</p>



<a name="163405600"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405600" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405600">(Apr 15 2019 at 18:48)</a>:</h4>
<p>in order to do their work, they have to solve goals</p>



<a name="163405608"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405608" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405608">(Apr 15 2019 at 18:48)</a>:</h4>
<blockquote>
<p>specialization?</p>
</blockquote>
<p>(yes, but I'm getting to it)</p>



<a name="163405630"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405630" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405630">(Apr 15 2019 at 18:48)</a>:</h4>
<p>so they ask the database "hey solve this goal", and it has (internally) a cached solver that it delegates to, etc</p>



<a name="163405635"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405635" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405635">(Apr 15 2019 at 18:48)</a>:</h4>
<p>they use the trait to do this</p>



<a name="163405787"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405787" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405787">(Apr 15 2019 at 18:50)</a>:</h4>
<p>currently, the "solving" callback is not used when lowering from rust-ir to program clauses</p>



<a name="163405818"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405818" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405818">(Apr 15 2019 at 18:50)</a>:</h4>
<p>however, I grouped them together because, to handle specialization, we do expect to have to solve goals and figure out the overlap between impls</p>



<a name="163405840"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405840" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405840">(Apr 15 2019 at 18:50)</a>:</h4>
<p>and so creating the program clauses for a given impl (say, one that contains a <code>default</code> associated type) will require running coherence checks</p>



<a name="163405904"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405904" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405904">(Apr 15 2019 at 18:51)</a>:</h4>
<p>this needs a bit more work to tease out, and this problem I keep hinting at is precisely here -- right now, the solver requires <code>&amp;mut self</code> access. So if it invokes the callback to ask for program clauses, and that recursively invokes stuff in the solver, we have a cycle (what will happen in the code as it is today is a deadlock, because there is a <code>Mutex</code> involved)</p>



<a name="163405962"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405962" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405962">(Apr 15 2019 at 18:52)</a>:</h4>
<p>(I think that what this means is that the "coherence checks" want to instantiate their own solver, which ironically is what the code <em>used</em> to do and I removed it)</p>



<a name="163405970"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163405970" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163405970">(Apr 15 2019 at 18:52)</a>:</h4>
<p>But that's a relatively minor point</p>



<a name="163406055"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406055" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406055">(Apr 15 2019 at 18:53)</a>:</h4>
<p>Anyway, to bring this back, since we're nearing on an hour here.</p>



<a name="163406118"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406118" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406118">(Apr 15 2019 at 18:54)</a>:</h4>
<p>I think we should land my PR, first of all ;)</p>



<a name="163406131"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406131" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406131">(Apr 15 2019 at 18:54)</a>:</h4>
<p>but there is still some refactoring to be done -- I think maybe now it is easier to define what that is</p>



<a name="163406157"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406157" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406157">(Apr 15 2019 at 18:55)</a>:</h4>
<p>I wrote in <a href="https://paper.dropbox.com/doc/WG-Traits-2019.04.15-chalk-query--AbTbcYDBEu6753uK9x19rzH6Ag-N5HWPSfKFg4QM0GXzVpln" target="_blank" title="https://paper.dropbox.com/doc/WG-Traits-2019.04.15-chalk-query--AbTbcYDBEu6753uK9x19rzH6Ag-N5HWPSfKFg4QM0GXzVpln">the paper doc</a>:</p>
<ul>
<li>refactor logic when requesting program clauses for a given goal to be more narrow</li>
<li>create some sort of unified “facade” create that combines chalk-solve and chalk-rules</li>
</ul>



<a name="163406174"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406174" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406174">(Apr 15 2019 at 18:55)</a>:</h4>
<p>but I guess I left out "solve recursive solver setup"</p>



<a name="163406187"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406187" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406187">(Apr 15 2019 at 18:55)</a>:</h4>
<p>at that point we're starting to be able to define specialization too</p>



<a name="163406269"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406269" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406269">(Apr 15 2019 at 18:56)</a>:</h4>
<p>interestingly, this whole effort is in some sense a distraction ;) in that it doesn't really further the rustc-chalk integration we had <em>intended</em> to focus on. But I think it's important still -- and I also continue to have this nagging feeling that we should also push towards RLS integration.</p>



<a name="163406285"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406285" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406285">(Apr 15 2019 at 18:57)</a>:</h4>
<p>Basically though this work serves two goals:</p>
<ul>
<li>RLS integration</li>
<li>specialization support</li>
</ul>



<a name="163406337"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406337" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406337">(Apr 15 2019 at 18:57)</a>:</h4>
<p><span class="user-mention" data-user-id="117350">@Sunjay Varma</span> you had mentioned wanting to do work on the latter, how much time do you think you have available? Similarly, <span class="user-mention" data-user-id="125131">@detrumi</span>? I was thinking that maybe we should the 3 of us try to sync a bit</p>



<a name="163406344"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406344" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406344">(Apr 15 2019 at 18:57)</a>:</h4>
<p>though others are welcome too :) but I wanted to bring up some other topics worth digging into</p>



<a name="163406433"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406433" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406433">(Apr 15 2019 at 18:58)</a>:</h4>
<p>i.e., I want to try and create two sub-efforts. One focused on these steps towards refactoring chalk (which I hope I have now unblocked, though I expect we'll have to do a bit more sync'ing and mentoring to make clear what's the next steps)</p>



<a name="163406444"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406444" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406444">(Apr 15 2019 at 18:58)</a>:</h4>
<p>and the other on some of the harder problems around built-in bounds, regions, etc</p>



<a name="163406489"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406489" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406489">(Apr 15 2019 at 18:59)</a>:</h4>
<p>( which I am happy to go on discussing, but I want to hold off a bit to wrap this up )</p>



<a name="163406499"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406499" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406499">(Apr 15 2019 at 18:59)</a>:</h4>
<blockquote>
<p>and the other on some of the harder problems around built-in bounds, regions, etc</p>
</blockquote>
<p>I guess harder isn't quite the right term, but there's a bit more unknowns in my mind about it</p>



<a name="163406533"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406533" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> detrumi <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406533">(Apr 15 2019 at 19:00)</a>:</h4>
<p>It's also more a core issue, while the first sub-effort is more on the edge</p>



<a name="163406684"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406684" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406684">(Apr 15 2019 at 19:01)</a>:</h4>
<p>yeah</p>



<a name="163406764"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406764" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406764">(Apr 15 2019 at 19:02)</a>:</h4>
<p>So, we had talked about trying to organize "sprints". Strictly speaking, we are mid sprint =) though it ends in a few weeks.</p>



<a name="163406778"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406778" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406778">(Apr 15 2019 at 19:02)</a>:</h4>
<p>(2019.03.18 - 2019.04.29)</p>



<a name="163406782"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406782" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406782">(Apr 15 2019 at 19:02)</a>:</h4>
<p>I don't actually <em>care</em> about this per se</p>



<a name="163406788"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406788" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406788">(Apr 15 2019 at 19:02)</a>:</h4>
<p>except that I think the concept of identifying some goals and working towards them is quite good</p>



<a name="163406797"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406797" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406797">(Apr 15 2019 at 19:02)</a>:</h4>
<p>so I guess what I'm saying is, I think we can make a few clear sprint goals around this topic</p>



<a name="163406815"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406815" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Sunjay Varma <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406815">(Apr 15 2019 at 19:03)</a>:</h4>
<p>Sorry, I'm unable to take very much time for this meeting today. I am available to work on specialization and I will have a good amount of time to work on it in the coming weeks.</p>



<a name="163406826"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406826" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Sunjay Varma <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406826">(Apr 15 2019 at 19:03)</a>:</h4>
<p>Will try to catch up later</p>



<a name="163406832"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406832" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Sunjay Varma <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406832">(Apr 15 2019 at 19:03)</a>:</h4>
<p>Feel free to DM me about stuff if needed :)</p>



<a name="163406852"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406852" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406852">(Apr 15 2019 at 19:03)</a>:</h4>
<p><span class="user-mention" data-user-id="125131">@detrumi</span> are you interested in pursuing the refactoring around queries and stuff we were talking about?</p>



<a name="163406866"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406866" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406866">(Apr 15 2019 at 19:03)</a>:</h4>
<p>I was guessing you might be given how you jumped on the id stuff</p>



<a name="163406872"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406872" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406872">(Apr 15 2019 at 19:03)</a>:</h4>
<p>and the connection to RLS</p>



<a name="163406878"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406878" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> detrumi <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406878">(Apr 15 2019 at 19:03)</a>:</h4>
<p>Yeah I'm definitely interested</p>



<a name="163406935"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406935" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406935">(Apr 15 2019 at 19:04)</a>:</h4>
<p><span aria-label="+1" class="emoji emoji-1f44d" role="img" title="+1">:+1:</span> ok, so let's try to make some time to sync up on that more deeply in a bit, perhaps with <span class="user-mention" data-user-id="117350">@Sunjay Varma</span>.</p>



<a name="163406984"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406984" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406984">(Apr 15 2019 at 19:05)</a>:</h4>
<p>I'm not sure who's still around, I feel like <em>this meeting</em> is over</p>



<a name="163406994"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163406994" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163406994">(Apr 15 2019 at 19:05)</a>:</h4>
<p>But I'm interested in starting another one to talk a bit more about the next steps on rustc-chalk integration :)</p>



<a name="163407116"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407116" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407116">(Apr 15 2019 at 19:06)</a>:</h4>
<p><span class="user-mention" data-user-id="116010">@Aaron Turon</span> you around?</p>



<a name="163407140"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407140" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407140">(Apr 15 2019 at 19:07)</a>:</h4>
<p>(cc <span class="user-mention" data-user-id="131694">@scalexm</span> -- were you around today?)</p>



<a name="163407162"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407162" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407162">(Apr 15 2019 at 19:07)</a>:</h4>
<p>I was looking over the <a href="https://paper.dropbox.com/doc/2019.03.18-2019.04.29--AbS_MVSXwugVKLIluWeWhX0vAg-5gix1dpUSHKirVcEww5iw" target="_blank" title="https://paper.dropbox.com/doc/2019.03.18-2019.04.29--AbS_MVSXwugVKLIluWeWhX0vAg-5gix1dpUSHKirVcEww5iw">current sprint document</a>, and I guess it's still more-or-less ok.</p>



<a name="163407172"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407172" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407172">(Apr 15 2019 at 19:07)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> I wasn’t, just got out of work</p>



<a name="163407193"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407193" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407193">(Apr 15 2019 at 19:07)</a>:</h4>
<p>I’ll read over after dinner</p>



<a name="163407252"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407252" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407252">(Apr 15 2019 at 19:08)</a>:</h4>
<p>No worries, the tl;dr is that I'm going to land my PR and try to write-up some concrete "next steps" as far as chalk query-ification goes</p>



<a name="163407270"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407270" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407270">(Apr 15 2019 at 19:08)</a>:</h4>
<p>Ok seems good, I skimmed through the PR already and it looked good</p>



<a name="163407277"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407277" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407277">(Apr 15 2019 at 19:08)</a>:</h4>
<p>I was just thinking about the more general topic of rustc-chalk integration</p>



<a name="163407311"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407311" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407311">(Apr 15 2019 at 19:09)</a>:</h4>
<p>I feel like there are two tricky topics:</p>
<ul>
<li>the builtin-bounds stuff -- basically, what do to when you have (e.g.) <code>?T: Sized</code> </li>
<li>region obligations</li>
</ul>



<a name="163407315"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407315" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407315">(Apr 15 2019 at 19:09)</a>:</h4>
<p>and they are actually somewhat related</p>



<a name="163407326"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407326" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407326">(Apr 15 2019 at 19:09)</a>:</h4>
<p>Why do you think they are related?</p>



<a name="163407416"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407416" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407416">(Apr 15 2019 at 19:10)</a>:</h4>
<p>not <em>deeply</em> related but</p>



<a name="163407440"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407440" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407440">(Apr 15 2019 at 19:10)</a>:</h4>
<p>I think that when we encounter a <code>?T: Sized</code> goal, we basically know that we want to defer it and try to do other work, and then come back to it later</p>



<a name="163407442"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407442" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407442">(Apr 15 2019 at 19:10)</a>:</h4>
<p>right now that's not really what we are doing</p>



<a name="163407462"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407462" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407462">(Apr 15 2019 at 19:11)</a>:</h4>
<p>(indeed, SLG solvers have a mechanism for doing this already, though its purpose is for handling negative cycles)</p>



<a name="163407470"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407470" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407470">(Apr 15 2019 at 19:11)</a>:</h4>
<p>when you think about it, that's kind of what we are doing with region goals too</p>



<a name="163407499"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407499" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407499">(Apr 15 2019 at 19:11)</a>:</h4>
<p>i.e., we're proving that "X is true modulo this subgoal G that we chose not to solve"</p>



<a name="163407608"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407608" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407608">(Apr 15 2019 at 19:12)</a>:</h4>
<p>anyway, i'm not sure if we want to handle them through the same mechanism, but we might.</p>



<a name="163407654"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407654" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407654">(Apr 15 2019 at 19:13)</a>:</h4>
<p>regardless, I thought it would be useful to try and spend some time talking about how the SLG solver works, both at a theoretical level and an <em>actual</em> level (like, how the chalk-engine crate is implementd)</p>



<a name="163407684"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407684" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407684">(Apr 15 2019 at 19:13)</a>:</h4>
<p>and was going to propose that we try to schedule a (recorded) meeting to do that -- <em>ideally</em> this week, though that might be hard to schedule</p>



<a name="163407797"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407797" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407797">(Apr 15 2019 at 19:14)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> ok i like the idea of talking about the SLG solver</p>



<a name="163407838"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407838" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407838">(Apr 15 2019 at 19:15)</a>:</h4>
<p>This week might be tricky for me regarding scheduling</p>



<a name="163407878"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407878" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407878">(Apr 15 2019 at 19:15)</a>:</h4>
<p>OK, here are some questions:</p>



<a name="163407948"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407948" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407948">(Apr 15 2019 at 19:16)</a>:</h4>
<ul>
<li>Zoom or Zulip? For a technical deep dive, I'm tempted to say Zoom (voice) but I'm not sure </li>
<li>Exactly what to cover?</li>
</ul>



<a name="163407957"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407957" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407957">(Apr 15 2019 at 19:16)</a>:</h4>
<p>I'm thinking maybe next monday could be good</p>



<a name="163407967"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407967" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407967">(Apr 15 2019 at 19:16)</a>:</h4>
<p>in terms of giving time to prepare and meeting scheduling constraints</p>



<a name="163407990"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163407990" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163407990">(Apr 15 2019 at 19:17)</a>:</h4>
<p>Yes next Monday is good, it’s an holiday here</p>



<a name="163408010"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408010" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408010">(Apr 15 2019 at 19:17)</a>:</h4>
<p>I have to go review, I think what I would ideally do is to cover</p>



<a name="163408176"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408176" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408176">(Apr 15 2019 at 19:19)</a>:</h4>
<p>the paper "A New Formulation of Tabled Resolution with Delay"</p>



<a name="163408179"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408179" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408179">(Apr 15 2019 at 19:19)</a>:</h4>
<p>sorry, got lost hunting for a link and gave up</p>



<a name="163408181"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408181" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408181">(Apr 15 2019 at 19:19)</a>:</h4>
<p>that's the more theoretical side, anyway</p>



<a name="163408183"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408183" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408183">(Apr 15 2019 at 19:19)</a>:</h4>
<p>and try to map it to what the code does</p>



<a name="163408187"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408187" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408187">(Apr 15 2019 at 19:19)</a>:</h4>
<p>it'd kind of be good for me to remember too</p>



<a name="163408248"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408248" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408248">(Apr 15 2019 at 19:20)</a>:</h4>
<p>anyway, ok, so shall we schedule something for monday?</p>



<a name="163408269"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408269" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408269">(Apr 15 2019 at 19:20)</a>:</h4>
<p>Seems fine to me</p>



<a name="163408275"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408275" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408275">(Apr 15 2019 at 19:20)</a>:</h4>
<p>I wonder if that's a holiday for me, too</p>



<a name="163408297"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408297" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408297">(Apr 15 2019 at 19:21)</a>:</h4>
<p>(no)</p>



<a name="163408314"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408314" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408314">(Apr 15 2019 at 19:21)</a>:</h4>
<p>Given that it's a holiday for you, <span class="user-mention" data-user-id="131694">@scalexm</span>, would you rather do a bit earlier?</p>



<a name="163408395"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408395" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408395">(Apr 15 2019 at 19:22)</a>:</h4>
<p>I'll just make a doodle</p>



<a name="163408443"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408443" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408443">(Apr 15 2019 at 19:23)</a>:</h4>
<p>Yeah earlier is even better</p>



<a name="163408446"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408446" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408446">(Apr 15 2019 at 19:23)</a>:</h4>
<p>OK -- if you're interested in learning about the chalk-engine crate and SLG solving, <a href="https://doodle.com/poll/zp9wckw98p5aprbd" target="_blank" title="https://doodle.com/poll/zp9wckw98p5aprbd">doodle poll here</a></p>



<a name="163408732"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408732" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408732">(Apr 15 2019 at 19:27)</a>:</h4>
<p>Looks like 12:00 noon is the winner</p>



<a name="163408734"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408734" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408734">(Apr 15 2019 at 19:28)</a>:</h4>
<p>(Boston time)</p>



<a name="163408776"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408776" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408776">(Apr 15 2019 at 19:28)</a>:</h4>
<p>I'll just go schedule that</p>



<a name="163408844"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/meeting%202019-04-15/near/163408844" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/meeting.202019-04-15.html#163408844">(Apr 15 2019 at 19:29)</a>:</h4>
<p><a href="https://calendar.google.com/event?action=TEMPLATE&amp;tmeid=NWI3aThqajdtcTRycTRnNWxpdHJhajVrZGEgNnU1cnJ0Y2U2bHJ0djA3cGZpM2RhbWdqdXNAZw&amp;tmsrc=6u5rrtce6lrtv07pfi3damgjus%40group.calendar.google.com" target="_blank" title="https://calendar.google.com/event?action=TEMPLATE&amp;tmeid=NWI3aThqajdtcTRycTRnNWxpdHJhajVrZGEgNnU1cnJ0Y2U2bHJ0djA3cGZpM2RhbWdqdXNAZw&amp;tmsrc=6u5rrtce6lrtv07pfi3damgjus%40group.calendar.google.com">Calendar event</a></p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>